package Huihu.src.Duoxiancheng;
/*
静态代理总结
1、真实对象和代理对象都要同时实现同一个接口
2、代理对象要代理真实角色
好处：
代理对象可以做真实对象做不了的事情
真实对象专注做自己的事情
 */
public class StacticProxy {
    public static void main(String[] args) {
        //You you=new You();
        //you.HappyMarry();//自己结婚
        WeddingCompany weddingCompany = new WeddingCompany(new You());
        weddingCompany.HappyMarry();//婚庆公司代理结婚
    }
}
    interface Marry{
        void HappyMarry();
    }

    //真实角色，你去结婚
    class You implements Marry{
        @Override
        public void HappyMarry() {
            System.out.println("华晨宇要结婚了，好开心");
        }
    }

    //代理角色，帮助你去结婚
    class WeddingCompany implements Marry{
        private Marry target;

        public WeddingCompany(Marry target) {
            this.target = target;
        }

        @Override
        public void HappyMarry() {
            after();
            this.target.HappyMarry();//这就是真实对象
            before();
        }

        private void before() {
            System.out.println("结婚之后，收拾尾款");
        }

        private void after() {
            System.out.println("结婚之前，布置场地");
        }
    }
